package com.zb.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zb.entity.*;
import com.zb.vo.*;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 产品表 服务类
 * </p>
 *
 * @author WEN
 * @since 2023-08-15
 */
public interface ZjProductService extends IService<ZjProduct> {

    /**
     * 新增或修改产品
     * @param loginInfo 登录账号信息
     * @param goodsVo
     */
    void save(AccounLoginInfo loginInfo, GoodsVo goodsVo);


    /**
     * 获取产品列表
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    Map<String, Object> getList(Long custAccId, GoodsSelectVo selectVo);

    /**
     * 根据产品ID获取产品详情
     * @param id
     * @return
     */
    GoodesDetailVo getProductDetail(Long id);

    /**
     * 批量启用或禁用产品
     * @param idList 商品ID集合
     * @param status 状态：false-启用，true-禁用
     */
    void updateBatchDisabledByIds(List<Long> idList, boolean status);

    /**
     * 根据品牌ID更新品牌名称
     * @param brandId 品牌ID
     */
    void updateBrandByBrandId(Long brandId, String brand);

    /**
     * 根据分类ID更新商品分类名称
     * @param typeId 分类ID
     * @param type 分类名称
     */
    void updateTypeByTypeId(Long typeId, String type);

    /**
     * 根据商品单位ID更改商品单位名称
     * @param unitId 单位ID
     * @param unit 单位名称
     */
    void updateUnitByUnitId(Long unitId, String unit);

    /**
     * 根据产品ID获取产品参数
     * @param id 产品ID
     * @return
     */
    GoodsDetailParamVo getProductParam(Long id);

    /**
     * 根据产品ID获取产品修改前的信息
     * @param id 产品ID
     * @return
     */
    GoodsVo getInfo(Long id);

    /**
     * 根据产品ID获取产品信息
     * @param idList
     * @return
     */
    List<GoodsInfo> getInfoByIds(List<Long> idList);


    /**
     * 根据商家ID获取成品下拉数据
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    Map<String, Object> pageSelect(Long custAccId, SelectVo selectVo);

    /**
     * 分页获取产品ID集合
     * @param goodsSelect
     * @return
     */
    List<Long> pageGetIds(GoodsSelect goodsSelect);

    /**
     * 根据ID删除产品
     * @param ids
     */
    void deleteBatchById(List<Long> ids);

    /**
     * 根据品牌ID查询关联产品的品牌
     * @param brandIds
     * @return
     */
    List<String> getRelationBranByBrandIds(List<Long> brandIds);

    /**
     * 获取移动端商品品牌列表
     * @param custAccId 商品ID
     * @param selectVo 搜索条件
     * @return
     */
    Map<String, Object> pageMobileGoodsBrandSelect(Long custAccId, FactorySelectVo selectVo);

    /**
     * 根据商品分类Id获取关联商品型号
     * @param typeIds 商品分类ID
     * @return
     */
    List<ZjProduct> getRelationTypeByTypeIds(List<Long> typeIds);

    /**
     * 获取移动端商品分类列表
     * @param custAccId 商家ID
     * @param brandId 品牌ID
     * @param selectVo 搜索条件
     * @return
     */
    Map<String, Object> pageMobileGoodsTypeSelect(Long custAccId, Long brandId, FactorySelectVo selectVo);

    /**
     * 根据商品单位ID获取关联商品型号
     * @param unitIds 商品单位ID
     * @return
     */
    List<ZjProduct> getRelationUnitByUnitIds(List<Long> unitIds);

    /**
     * 根据商品ID&商品规格ID获取商品信息
     * @param goodsId 商品ID
     * @param goodsSpecId 商品规格ID
     * @return
     */
    SelectGoodsVo getGoodsByIdAndSpecId(Long goodsId, Long goodsSpecId);

    List<GoodsSpecInfoVo> getSpecByGoodsId(Long goodsId);
}
